package com.cymal.utils;

import com.cymal.model.RedisNode;
import org.apache.commons.lang3.StringUtils;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;

/**
 * <p>
 *     把XML中的Node结点中的属性转化成RedisServerBean中的属性
 * </p>
 */
public class XmlNodeToRedisNodeUtils {

    /**
     * Xml Node to Redis Node
     * @param node：Xml结点
     * @return RedisNode
     */
    public static RedisNode toRedisNode(Node node) {
        RedisNode redisNode = new RedisNode();
        NamedNodeMap attributes = node.getAttributes();
        buidNode(redisNode, attributes);
        return redisNode;
    }


    /**
     * 返回Node中的属性
     * @param node
     * @return
     */
    public static String toName(Node node, String attirbute) {
        NamedNodeMap attributes = node.getAttributes();
        Node name = attributes.getNamedItem(attirbute);
        if (null==name && StringUtils.isNotBlank(name.getNodeValue())) {
            throw new RuntimeException("没有" + attirbute + "属性");
        }
        return name.getNodeValue();
    }


    /**
     * 构造结点
     * @param redisNode redis结点
     * @param attributes 属性列表
     */
    private static void buidNode(RedisNode redisNode, NamedNodeMap attributes) {
        Node host = attributes.getNamedItem("host");
        if (null==host && StringUtils.isNotBlank(host.getNodeValue())) {
            throw new RuntimeException("请配置host");
        }
        redisNode.setHost(host.getNodeValue());
        Node port = attributes.getNamedItem("port");
        if (null==port && StringUtils.isNotBlank(port.getNodeValue())) {
            throw new RuntimeException("请配置port");
        }
        redisNode.setPort(Integer.valueOf(port.getNodeValue()));
        Node auth = attributes.getNamedItem("auth");
        if (null==auth && StringUtils.isNotBlank(auth.getNodeValue())) {
            throw new RuntimeException("请配置auth");
        }
        redisNode.setAuth(auth.getNodeValue());
    }

}
